package db.relation;

import java.util.HashMap;
import java.util.Iterator;
import java.util.ArrayList;

import db.BaseDAO;
import db.DAOFactory;
import db.Transaction;
import db.TransformInterface;


import model.*;
import model.relation.UserGroup;

/**
 * 
 * Description: 对用户与权限级别的关系集数据进行处理的DAO。
 * 
 * @since  2009/2/23
 * @author ashen
 * 
 */
public class UserGroupDAO extends BaseDAO implements TransformInterface<UserGroup>{
	
	public UserGroupDAO(){
		setTableName("userscheme.usergroup");
	}
	
	/**
	 * the method save of class UserGroupDAO
	 * 
	 * 该方法将用户与权限级别的关系记录存储到数据库
	 * 
	 * @param userGroup 需要保存的UserGroup对象
	 * @param transaction 数据库操作类Transaction的对象
	 */
	public void save(UserGroup userGroup,Transaction transaction){
		save(object2HashMap(userGroup),transaction);
	}
	
	/**
	 * the method save of class UserGroupDAO
	 * 
	 * 该方法将用户与权限级别的关系记录存储到数据库
	 * 
	 * @param userGroup 需要保存的UserGroup对象
	 * @return 操作成功与否
	 *
	 */
	public boolean save(UserGroup userGroup){
		Transaction transaction=new Transaction();
		save(userGroup,transaction);
		return transaction.commit();		
	}
	
	/**
	 * the method update of class UserGroupDAO 
	 * 
	 * 该方法将参数用户与权限级别的关系对象更新到数据库
	 * 
	 * @param userGroup 需要更新的UserGroup对象
	 * @param transaction 数据库操作类Transaction的对象
	 */
	public void update(UserGroup userGroup,Transaction transaction){
		update(object2HashMap(userGroup),"USERID",transaction);
	}
	
	/**
	 * the method update of class UserGroupDAO 
	 * 
	 * 该方法将参数用户与权限级别的关系对象更新到数据库
	 * 
	 * @param userGroup 需要更新的UserGroup对象
	 * @return 操作成功与否
	 */
	public boolean update(UserGroup userGroup){
		Transaction transaction=new Transaction();
		update(userGroup,transaction);
		return transaction.commit();
	}
	
	/**
	 * the method delete of class UserGroupDAO
	 * 
	 * 该方法删除用户ID等于参数userId
	 * 且权限级别ID等于参数roleId的用户与权限级别的关系记录
	 * 
	 * @param roleId 权限级别的ID
	 * @param userId 用户的ID
	 * @param transaction 数据库操作类Transaction的对象
	 */
	public void delete(int roleId,int userId,Transaction transaction){
		delete("roleId",roleId,"userId",userId,transaction);
	}
	
	/**
	 * the method findAll of class UserGroupDAO
	 * 
	 * 该方法返回所有用户与权限级别的关系记录
	 * 
	 * @return ArrayList<UserGroup>类型，返回数据中所有用户与权限级别的关系记录
	 */
	public ArrayList<UserGroup> findAll(){
		Transaction transaction=new Transaction();
		ArrayList<UserGroup> list= list2ObjectList(super.findAllBase(transaction));
		transaction.close();
		return list;
	}
	
	/**
	 * the method findByUserId of class UserGroupDAO
	 * 
	 * 该方法查找与指定ID的用户对应的权限级别
	 * 
	 * @param id 用户的ID
	 * @return Role类型的结果
	 */
	public Role findByUserId(int id){
		Transaction transaction=new Transaction();		 
		UserGroup userGroup=hashMap2Object(findByPK("userId", id,transaction));
		if(userGroup==null)
			return null;
		Role role=userGroup.getRole();
		transaction.close();
		return role;
	}

	/**
	 * the method findById of class UserGroupDAO
	 * 
	 * 该方法查找权限操作ID等于参数userId
	 * 且权限级别ID等于参数roleId的用户与权限级别的关系记录
	 * 
	 * @param userId 用户ID
	 * @param roleId 权限级别ID
	 * @return 查询到的用户和权限级别的关系记录
	 */
	public UserGroup findById(int roleId,int userId){
		Transaction transaction=new Transaction();
		UserGroup userGroup= 
			hashMap2Object(findByPK("roleId",roleId,"userId",userId,transaction));
		transaction.close();
		return userGroup;
	}
	
	
	/**
	 * the method list2ObjectList of class UserGroupDAO
	 * 
	 * 该方法将存有权限级别和用户关系信息的HashMap对象数组转换为UserGroup对象数组
	 * 
	 * @param hashMapList HashMap对象数组
	 * @return UserGroup对象数组
	 */
	public ArrayList<UserGroup> list2ObjectList(ArrayList<HashMap> hashMapList){
		UserGroup tempObject=null;
		ArrayList<UserGroup> resultList=new ArrayList<UserGroup>();
		if(hashMapList.isEmpty())
			return resultList;
		for(Iterator i=hashMapList.iterator();i.hasNext();){
			tempObject=hashMap2Object((HashMap)i.next());
			if(tempObject!=null)
				resultList.add(tempObject);
		}
		return resultList;
	}
	
	/**
	 * the method hashtable2Point of class UserGroupDAO
	 * 
	 * 该方法将HashMap类型的对象转换为UserGroup的对象，并返回UserGroup的对象.
	 * 
	 * @param hashMap 存储了一个用户与权限级别关系信息的HashMap类型的对象
	 * @return UserGroup的对象.
	 */
	public UserGroup hashMap2Object(HashMap hashMap){
		if(hashMap==null)
			return null;
		UserGroup userGroup=new UserGroup();
		userGroup.setUserId((Integer)hashMap.get("USERID"));
		Role role=DAOFactory.getRoleDAO().findById((Integer)hashMap.get("ROLEID"));
		userGroup.setRole(role);			
		return userGroup;
	}
	
	/**
	 * the method object2HashMap of class UserGroupDAO
	 * 
	 * 该方法将参数UserGroup对象转换为存储参数UserGroup对象信息的HashMap对象，并返回
	 * 
	 * @param userGroup 权限操作UserGroup对象
	 * @return 存储参数权限操作UserGroup对象信息的HashMap对象
	 */
	public HashMap object2HashMap(UserGroup userGroup){
		HashMap hashMap=new HashMap();
		hashMap.put("USERID", userGroup.getUserId());
		hashMap.put("ROLEID", userGroup.getRole().getId());
		return hashMap;
	}
		
}